package org.darkforest.common.services;

import org.darkforest.model.Store;
import org.darkforest.model.StoreJoinIn;
import org.darkforest.model.StoreWithBLOBs;

import java.util.List;
import java.util.Map;

/**
 * Created by Libing on 2015/3/23.
 */
public interface StoreService {
    List<Store> findStoreGoods(Integer storeId);

    /**
     * 根据用户信息查询商铺信息
     * @param memberId
     * @return
     */
    StoreWithBLOBs findStoreByMemberId(Integer memberId);

    /**
     * 根据主键查询店铺信息
     * @param storeId
     * @return
     */
    StoreWithBLOBs findStoreInfoByPrimary(Integer storeId);


    /**
     * 更新店铺配置
     * @param storeWithBLOBs
     * @return
     */
    int updateStoreSettings(StoreWithBLOBs storeWithBLOBs);

    Store selectStoreByPrimaryKey(Integer storeId);

    /**
     * 根据条件查询店铺列表
     * @param record
     * @return
     */
    List<Store> findStoreByCondition(Store record);

    /**
     * 自营店铺分页列表
     * @param store
     * @return
     */
    Store findStoreByPage(Store store);

    void insertSelective(StoreWithBLOBs store);

    int updateByPrimaryKeySelective(StoreWithBLOBs record);

    int updateByPrimaryKeyWithBLOBs(StoreWithBLOBs record);

    int deleteByPrimaryKey(Integer storeId);

    /**
     * 在编辑时 查询除本身之后的相同数据
     * @param map
     * @return
     */
    List<Store> findStoreExceptSelf(Map<String, Object> map);

    void addStore(StoreJoinIn storeJoinin);

    /**
     * 店铺等级
     * @param store
     * @return
     */

    Map<String,Object> findStoreDegreeByCondition(Store store);

    /**
     * 店铺区域分布
     * @param store
     * @return
     */
    List<Map<String,Object>> findStoreAreaByCondition(Store store);

    /**
     * 店铺销售排行
     * @param store
     * @return
     */
    List<Map<String,Object>> findStoreSalesByCondition(Store store);

    /**
     * 店铺销量前30
     * @param store
     * @return
     */
    List<Map<String,Object>> findStoreTop30ByCondition(Store store);

    List<Map<String,Object>> findAddStoreByCondition(Store store);

    /***
     * 关闭店铺
     * @param store
     */
    void closeStore(Store store);

    /***
     * 修改店铺
     * @param storeInfo
     */
    void modifyStore(StoreWithBLOBs storeInfo);
}
